import pytest
import requests
from api.api_risk_tender import ApiRiskTender
from api.api_register_login import ApiRegisterLogin
from api import log
from common.bs_util import html_parser
from data import tender


class Test03RiskTender:
    # 初始化
    def setup(self):
        # 获取session对象
        self.session = requests.session()
        # 获取ApiRiskTender实例
        self.tender = ApiRiskTender(self.session)
        # 登录系统
        ApiRegisterLogin(self.session).api_login(13800000001, "test123")

    # 数据清理
    def teardown(self):
        # 关闭session对象
        self.session.close()

    # 1-风险评估接口测试
    def test_01_risk(self):
        try:
            # 调用风险评估接口
            res = self.tender.api_risk()
            log.info("调用风险评估接口返回结果：{}".format(res.json()))
            # 添加断言，判断测试结果是否通过
            assert "提交成功" in res.text
            log.info("调用风险评估接口断言通过！")
        except Exception as e:
            # 输出异常信息
            log.error("调用风险评估接口出错：{}".format(e))
            # 抛出异常
            raise

    # 2-投资接口测试
    @pytest.mark.parametrize("params", tender)
    def test_02_tender(self, params):
        try:
            # 调用投资接口
            res = self.tender.api_tender(params["amount"])
            log.info("调用投资接口返回结果：{}".format(res.json()))
            # 添加断言，判断测试结果是否通过
            assert "form" in res.text
            log.info("调用投资接口断言通过！")
            # 获取投资返回值参数
            html = res.json()["description"]["form"]  # 从接口响应的json文件中提取html数据
            result = html_parser(html=html)
            # 期望  (http://xxxx,{"Version":10,})
            res2 = self.session.post(url=result[0], data=result[1])  # 执行三方接口请求
            log.info("三方投资返回结果：{}".format(res2.text))
            # 添加断言
            assert params["expect_text"] in res2.text
            log.info("调用三方投资接口断言通过！")
        except Exception as e:
            # 输出异常信息
            log.error("调用投资接口出错：{}".format(e))
            # 抛出异常
            raise
